package review.Day_0401;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zxc
 * @date 2023/04/01 17:58
 **/
public class Solution03 {
    public static void main(String[] args) {
        System.out.println(asteroidCollision(new int[]{-2, -2, 1, -1}));
    }
    // 思路 ：即，使用变量保存
    public static int[] asteroidCollision(int[] asteroids) {
        List<Integer> tempList = new ArrayList<>();
        // 统计tempList中元素个数;
        int len = 0;
        // 遍历asteroids数组中所有元素
        for (int asteroid : asteroids) {
            // tempList为空的情况下 ：
            if(len == 0){
                tempList.add(asteroid);
                len++;
            }
            else {
                // 当前所要插入元素为正 ：即，当前小行星向右移动,不可能和之前的小行星发生碰撞;
                if(asteroid > 0){
                    tempList.add(asteroid);
                    len++;
                }
                // 当前所要插入元素为负 ：
                // 需要判断之前集合中元素是否满足条件
                else {
                    boolean flag = false;
                    while(true){
                        // 获取集合尾部元素
                        Integer value = tempList.get(len - 1);
                        // 集合尾部元素 < 0
                        if(value < 0){
                            flag = true;
                            len++;
                            break;
                        }
                        // 集合尾部元素 > 当前元素
                        if(value + asteroid > 0){
                            break;
                        }
                        // 集合尾部元素 == 当前元素
                        else if (value + asteroid == 0) {
                            tempList.remove(len - 1);
                            len--;
                            break;
                        }
                        // 集合尾部元素 < 当前元素
                        else {
                            tempList.remove(len - 1);
                            len--;
                            if(tempList.isEmpty()){
                                flag = true;
                                len++;
                                break;
                            }
                        }
                    }
                    // flag == true，即将当前元素加入到tempList集合中;
                    if(flag){
                        tempList.add(asteroid);
                    }
                }
            }
        }
        int[] result = new int[len];
        int k = 0;
        for (Integer integer : tempList) {
            result[k++] = integer;
        }
        return result;
    }
}
